#!/bin/sh

# Функция для создания тега из сообщения коммита
create_tag_from_commit() {
    commit_hash=$1
    commit_message=$2

    # Извлекаем версию из сообщения коммита
    version=$(echo "$commit_message" | sed -n 's/^\(.*\):.*$/\1/p')
    # Если версия не найдена по паттерну с двоеточием, ищем до переноса строки
    if [ -z "$version" ]; then
        version=$(echo "$commit_message" | sed -n 's/^\(.*\)$/\1/p' | head -n 1)
    fi
    # Проверяем, что версия не пустая и не содержит недопустимых символов для тега
    if [ -n "$version" ]; then
        # Проверяем, существует ли уже тег с таким именем
        if ! git rev-parse "$version" >/dev/null 2>&1; then
            # Создаем тег с версией
            git tag -a "$version" -m "$commit_message" "$commit_hash"
            echo "Tag $version created for commit $commit_hash"
        else
            echo "Tag $version already exists, skipping..."
        fi
    fi
}

# Получаем хэш первого коммита
first_commit_hash=$(git rev-list --max-parents=0 HEAD)
# Получаем сообщение первого коммита
first_commit_message=$(git log -1 --pretty=format:'%s' "$first_commit_hash")
# Создаем тег для первого коммита
create_tag_from_commit "$first_commit_hash" "$first_commit_message"

# Получаем все остальные коммиты, кроме первого, в формате хэш и сообщение
git log --pretty=format:'%H %s' --reverse | tail -n +2 | while read -r commit_hash commit_message; do
    create_tag_from_commit "$commit_hash" "$commit_message"
done
